/* eslint valid-jsdoc: "off" */
const path = require('path')
const os = require('os')
/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_wardrobe_secret_key';

  // 端口配置
  config.cluster = {
    listen: {
      port: 7002,
      hostname: '127.0.0.1',
    },
  };

  // add your middleware config here
  config.middleware = ['errorHandler', 'authHandler'];

  // 认证中间件配置
  config.auth = {
    ignore: [
      '/api/v1/user/login',
      '/api/v1/user/register',
      '/public',
      '/favicon.ico',
      '/'
    ]
  };

  // 安全配置
  config.security = {
    csrf: {
      enable: false,
    },
  };

  // CORS配置
  config.cors = {
    origin: '*',
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',
  };

  // // 文件上传配置
  // config.multipart = {
  //   mode: 'file',
  //   fileSize: '50mb',
  //   whitelist: ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'],
  // };
  // 静态文件服务配置 - 需要添加到config对象中
  // 文件上传配置 - 需要添加到config对象中
  config.upload = {
    baseDir: path.join(appInfo.baseDir, 'app/public'), // 基础目录
    uploadDir: 'uploads', // 上传子目录
    demoDir: 'uploads/demo', // demo目录
    maxFileSize: 10 * 1024 * 1024, // 10MB
    allowedExtensions: ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'],
    // 访问URL前缀配置
    accessBaseUrl: '/public', // 静态资源访问基础路径
    getAccessUrl: function(filename) {
      return `${this.accessBaseUrl}/uploads/demo/${filename}`;
    }
  };

  // 确保multipart配置正确
  config.multipart = {
    mode: 'file',
    fileSize: '50mb',
    whitelist: ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'],
    tmpdir: path.join(os.tmpdir(), 'egg-multipart-tmp'), // 临时目录
    cleanSchedule: {
      cron: '0 30 4 * * *', // 每天凌晨4:30清理临时文件
    },
  };

  // JWT配置
  config.jwt = {
    secret: 'wardrobe_jwt_secret_key_2024',
    expiresIn: '7d',
  };

  // Sequelize数据库配置
  config.sequelize = {
    dialect: 'mysql',
    host: process.env.MySqlHost || '127.0.0.1',
    port: process.env.MySqlPort || 3306,
    database: process.env.MySqlDatabase || 'wardrobe_db',
    username: process.env.MySqlUsername || 'root',
    password: process.env.MySqlPassword || '302108jw302',
    timezone: '+08:00',
    define: {
      raw: true,
      underscored: true,
      charset: 'utf8mb4',
      timestamps: true,
      paranoid: true,
      freezeTableName: true,
      // 字段名映射配置
      createdAt: 'created_at',
      updatedAt: 'updated_at',
      deletedAt: 'deleted_at',
    },
    dialectOptions: {
      dateStrings: true,
      typeCast: true,
      charset: 'utf8mb4',
      collate: 'utf8mb4_unicode_ci',
    },
  };

  // Redis配置
  config.redis = {
    client: {
      port: 6379,
      host: '127.0.0.1',
      password: '',
      db: 0,
    },
  };

  // 静态文件配置
  // config.static = {
  //   prefix: '/public/',
  //   dir: 'app/public',
  // };
  config.static = {
    prefix: '/public/', // 访问前缀
    dir: path.join(appInfo.baseDir, 'app/public'), // 物理路径
    dynamic: true,
    preload: false,
    maxAge: 31536000,
    buffer: true,
  };


  // 天气API配置
  config.weather = {
    // 和风天气API配置，注册地址: https://dev.qweather.com/
    // 免费版每天1000次调用
    token: 'K6WKR2F6KX', // API Key，请替换为您的真实key
    apiHost: 'rk6yvxnwty.re.qweatherapi.com', // API Host地址，使用标准域名
    // 如果不配置真实token，系统将使用模拟数据

    // 使用示例：
    // token: 'your_actual_api_key',
    // apiHost: 'rk6yvxnwty.re.qweatherapi.com',
  };

  // 地理位置API配置
  config.location = {
    // 推荐使用高德地图API（国内最准确，免费额度大）
    provider: 'amap', // 可选: 'amap', 'baidu', 'tencent', 'ip'

    // 高德地图API配置
    amapKey: '458dddfa73628e037019c6dda2dba778', // 高德地图API Key，注册地址: https://lbs.amap.com/

    // 百度地图API配置（备选）
    baiduKey: 'your_baidu_key', // 百度地图API Key，注册地址: https://lbsyun.baidu.com/

    // 腾讯地图API配置（备选）
    tencentKey: 'your_tencent_key', // 腾讯地图API Key，注册地址: https://lbs.qq.com/

    // IP定位API配置（免费但精度较低）
    ipApiUrl: 'http://ip-api.com/json/', // 免费IP定位服务

    // 如果不配置真实API，系统将使用IP定位或默认位置
  };

  // AI大模型配置
  config.ai = {
    // 选择AI提供商: 'local', 'qianwen', 'deepseek', 'doubao', 'volcano', 'vapi', 'ollama', 'openai', 'zhipu'
    provider: 'volcano', // 使用火山引擎
    // 如果要使用通义千问，改为: provider: 'qianwen',

    // 🆓 免费AI服务配置（推荐）
    // 通义千问 - 阿里云免费额度（每月100万tokens）
    qianwenApiKey: 'your_qianwen_key', // 注册地址: https://dashscope.aliyuncs.com/

    // DeepSeek - 免费额度
    deepseekApiKey: 'sk-a79c7f1f0b164e2fa559db723804707e', // 注册地址: https://platform.deepseek.com/

    // 豆包 - 原始豆包API
    doubaoApiKey: 'your_doubao_key', // 注册地址: https://console.volcengine.com/ark/

    // 火山引擎火山方舟 - 免费额度 (端点: ep-m-20250724225547-7twv8, 模型: deepseek-r1-250528)
    volcanoApiKey: '97fef7f1-56e5-4290-978c-9072c918df67', // 注册地址: https://console.volcengine.com/ark/
    volcanoEndpoint: 'ep-m-20250724225547-7twv8', // 火山方舟端点ID
    volcanoModel: 'deepseek-r1-250528', // 使用的模型

    // V-API聚合服务 - 多模型聚合
    vapiKey: 'your_vapi_key', // 注册地址: https://api.v-api.cn/
    vapiBaseURL: 'https://api.v-api.cn/v1',

    // 💰 付费AI服务配置（可选）
    // OpenAI
    apiKey: 'your_openai_key',
    baseURL: 'https://api.openai.com/v1',
    model: 'gpt-3.5-turbo',

    // 智谱AI
    zhipuApiKey: 'your_zhipu_key',

    // 🏠 本地AI配置
    localModel: 'fashion-advisor',

    // Ollama配置（完全免费的本地大模型）
    ollamaHost: 'http://localhost:11434',
    ollamaModel: 'llama2', // 或 'mistral', 'codellama' 等

    // HuggingFace配置（免费API，有使用限制）
    huggingfaceModel: 'microsoft/DialoGPT-medium',

    // 如果不配置真实API密钥，系统将使用本地智能分析引擎

    /* 各大模型平台配置示例：

    // OpenAI配置
    provider: 'openai',
    apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    baseURL: 'https://api.openai.com/v1',
    model: 'gpt-3.5-turbo',

    // 通义千问配置
    provider: 'qianwen',
    apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    model: 'qwen-turbo',

    // 智谱AI配置
    provider: 'zhipu',
    apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxx',
    model: 'glm-4',

    */
  };

  // add your user config here
  const userConfig = {
    // 上传文件存储路径
    uploadDir: 'app/public/uploads',
    // API版本
    apiVersion: 'v1',
  };

  return {
    ...config,
    ...userConfig,
  };
};
